#!/bin/bash

# 显示帮助信息
show_help() {
    echo "用法: $0 [选项]"
    echo
    echo "选项:"
    echo "  -s, --source DIR   设置源目录（默认为当前目录）"
    echo "  -d, --dest DIR     设置目标目录（必须指定）"
    echo "  -h, --help         显示此帮助信息"
    echo
    echo "示例:"
    echo "  $0 -s /path/to/source -d /path/to/destination"
    echo "  $0 --source . --dest ./backup_links"
    echo
    echo "说明:"
    echo "  此脚本会遍历源目录下的所有文件，并在目标目录中创建对应的硬链接"
    echo "  注意：硬链接只能在同一文件系统上创建"
}

# 默认源目录为当前目录
src_dir="."
dst_dir=""

# 解析命令行参数
while [[ "$#" -gt 0 ]]; do
    case $1 in
        -s|--source) src_dir="$2"; shift ;;
        -d|--dest) dst_dir="$2"; shift ;;
        -h|--help) show_help; exit 0 ;;
        *) echo "未知参数: $1"; show_help; exit 1 ;;
    esac
    shift
done

# 检查目标目录是否指定
if [ -z "$dst_dir" ]; then
    echo "错误：必须指定目标目录"
    show_help
    exit 1
fi

# 检查源目录是否存在
if [ ! -d "$src_dir" ]; then
    echo "错误：源目录不存在: $src_dir"
    exit 1
fi

# 创建目标目录（如果不存在）
mkdir -p "$dst_dir" || { echo "错误：无法创建目标目录"; exit 1; }

# 进入源目录
cd "$src_dir" || { echo "错误：无法进入源目录"; exit 1; }

# 查找所有文件并创建硬链接
echo "正在从 $src_dir 创建硬链接到 $dst_dir ..."
find . -type f -print0 | while IFS= read -r -d '' file; do
    # 创建目标子目录（如果需要）
    mkdir -p "$dst_dir/$(dirname "$file")" || { echo "错误：无法创建子目录"; continue; }
    # 创建硬链接
    if ! ln -f "$file" "$dst_dir/$file" 2>/dev/null; then
        echo "警告：无法为 $file 创建硬链接（可能跨文件系统）"
    fi
done

echo "操作完成"
